home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / netBoot.new / sun4c.md / map.s < prev    next >
Text File  |  1990-12-19  |  2KB  |  73 lines

  1. !
  2. !    .seg    "data"
  3. !    .asciz    "@(#)map.s 1.5 88/02/08"
  4. !    Copyright (c) 1986 by Sun Microsystems, Inc.
  5. !
  6.  
  7. !
  8. ! Memory Mapping for Sun 4
  9. !
  10. ! The following subroutines accept any address in the mappable range
  11. ! (256 megs).  They access the map for the current context register.  They
  12. ! assume that currently we are running in supervisor state.
  13. #define ASI_SM 3            
  14. #define ASI_PM 4
  15. #define SEGMENTADDRBITS 0xFFFC0000
  16.     .seg    "text"
  17.  
  18. !
  19. ! Read the page map entry for the given address v
  20. ! and return it in a form suitable for software use.
  21. !
  22. ! long
  23. ! getpgmap(v)
  24. ! caddr_t v;
  25. !
  26.     .global _getpgmap
  27. _getpgmap:
  28.     andn    %o0,0x3,%o1        ! align to word boundary
  29.     lda    [%o1]ASI_PM,%o0        ! read page map entry
  30.     retl
  31.     nop                ! nop hack needed for proto 1 XXXX
  32.  
  33. ! Set the pme for address v using the software pte given.
  34. ! setpgmap(v, pte)
  35. ! caddr_t v;
  36. ! long pte;
  37.     .global _setpgmap
  38. _setpgmap:
  39.     andn    %o0,0x3,%o2        ! align to word boundary
  40.     retl
  41.     sta    %o1,[%o2]ASI_PM        ! write page map entry
  42.  
  43. !
  44. ! Set the segment map entry for segno to pm.
  45. ! setsegmap(v, pm)
  46. ! u_int segno;
  47. ! u_short pm;
  48.     .global _setsegmap
  49. _setsegmap:
  50.     set    SEGMENTADDRBITS, %o2
  51.     and    %o0, %o2, %o0        ! get relevant segment address bits
  52.     retl
  53.     stha    %o1,[%o0]ASI_SM        ! write segment entry
  54. /*
  55.  * Get the segment map entry for ther given virtual address
  56.  *
  57.  * getsegmap(v)
  58.  * caddr_t vaddr;
  59.  */
  60.     .global _getsegmap
  61. _getsegmap:
  62.         set     SEGMENTADDRBITS, %o2
  63.         and     %o0, %o2, %o0           ! get relevant segment address bits
  64.         lduha   [%o0]ASI_SM,%o0         ! read segment entry
  65.     retl
  66.     nop
  67.